home *** CD-ROM | disk | FTP | other *** search
- package com.sun.xml.parser;
-
- import java.io.CharConversionException;
- import java.io.IOException;
- import java.io.InputStream;
-
- final class XmlReader$Utf8Reader extends XmlReader.BaseReader {
- private char nextChar;
-
- XmlReader$Utf8Reader(InputStream var1) {
- super(var1);
- }
-
- public int read(char[] var1, int var2, int var3) throws IOException {
- int var4 = 0;
- int var5 = 0;
- if (var3 <= 0) {
- return 0;
- } else if (var2 + var3 <= var1.length && var2 >= 0) {
- if (this.nextChar != 0) {
- var1[var2 + var4++] = this.nextChar;
- this.nextChar = 0;
- }
-
- while(var4 < var3) {
- if (super.finish <= super.start) {
- if (super.instream == null) {
- var5 = -1;
- break;
- }
-
- super.start = 0;
- super.finish = super.instream.read(super.buffer, 0, super.buffer.length);
- if (super.finish <= 0) {
- ((XmlReader.BaseReader)this).close();
- var5 = -1;
- break;
- }
- }
-
- var5 = super.buffer[super.start] & 255;
- if ((var5 & 128) == 0) {
- ++super.start;
- var1[var2 + var4++] = (char)var5;
- } else {
- int var6 = super.start;
-
- try {
- if ((super.buffer[var6] & 224) == 192) {
- var5 = (super.buffer[var6++] & 31) << 6;
- var5 += super.buffer[var6++] & 63;
- } else if ((super.buffer[var6] & 240) == 224) {
- var5 = (super.buffer[var6++] & 15) << 12;
- var5 += (super.buffer[var6++] & 63) << 6;
- var5 += super.buffer[var6++] & 63;
- } else {
- if ((super.buffer[var6] & 248) != 240) {
- throw new CharConversionException("Unconvertible UTF-8 character beginning with 0x" + Integer.toHexString(super.buffer[super.start] & 255));
- }
-
- var5 = (super.buffer[var6++] & 7) << 18;
- var5 += (super.buffer[var6++] & 63) << 12;
- var5 += (super.buffer[var6++] & 63) << 6;
- var5 += super.buffer[var6++] & 63;
- if (var5 > 1114111) {
- throw new CharConversionException("UTF-8 encoding of character 0x00" + Integer.toHexString(var5) + " can't be converted to Unicode.");
- }
-
- if (var5 > 65535) {
- var5 -= 65536;
- this.nextChar = (char)('\udc00' + (var5 & 1023));
- var5 = '\ud800' + (var5 >> 10);
- }
- }
- } catch (ArrayIndexOutOfBoundsException var7) {
- var5 = 0;
- }
-
- if (var6 > super.finish) {
- System.arraycopy(super.buffer, super.start, super.buffer, 0, super.finish - super.start);
- super.finish -= super.start;
- super.start = 0;
- var6 = super.instream.read(super.buffer, super.finish, super.buffer.length - super.finish);
- if (var6 < 0) {
- ((XmlReader.BaseReader)this).close();
- throw new CharConversionException("Partial UTF-8 char");
- }
-
- super.finish += var6;
- } else {
- ++super.start;
-
- while(super.start < var6) {
- if ((super.buffer[super.start] & 192) != 128) {
- ((XmlReader.BaseReader)this).close();
- throw new CharConversionException("Malformed UTF-8 char -- is an XML encoding declaration missing?");
- }
-
- ++super.start;
- }
-
- var1[var2 + var4++] = (char)var5;
- if (this.nextChar != 0 && var4 < var3) {
- var1[var2 + var4++] = this.nextChar;
- this.nextChar = 0;
- }
- }
- }
- }
-
- if (var4 > 0) {
- return var4;
- } else {
- return var5 == -1 ? -1 : 0;
- }
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- }
- }
-